package 面向对象_中.fobject类的使用.equals;

import java.util.Objects;

/**
 * @Projectname java_based
 * @Filename CustomerTest
 * @Author an
 * @Data 2022/7/2 11:02
 * @Description TODO
 */
public class Customer {

    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Customer() {
        super();
    }
    public Customer(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }


    //自动生成的equals()

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Customer customer = (Customer) o;
        return age == customer.age && name.equals(customer.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }


    //重写原则，比较两个对象的实体内容(即name和age)是否相同
    //手动实现equals()的重写
//	@Override
//	public boolean equals(Object obj) {
//
//		System.out.println("Customer equals()....");
//		if(this == obj){
//			return true;
//		}
//
//		if(obj instanceof Customer){
//			Customer cust = (Customer)obj;
//			//比较两个对象的每个属性是否都相同
////			if(this.age == cust.age && this.name.equals(cust.name)){
////        return true;
////    }else{
////        return false;
////    }
//
//			//或   (同上注释内容)
//			return this.age == cust.age && this.name.equals(cust.name);
//		}else {
//            return false;
//        }
//
//	}


    /*
     * 为什么要重写equals？
     *继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。
     *
     * */
/*
* 重写equals方法的原则
* 对称性：如果x.equals(y)返回是“true”
，那么y.equals(x)也应该返回是
“true”。
 自反性：x.equals(x)必须返回是“true”。
 传递性：如果x.equals(y)返回是“true”
，而且y.equals(z)返回是“true”
，
那么z.equals(x)也应该返回是“true”。
 一致性：如果x.equals(y)返回是“true”
，只要x和y内容一直不变，不管你
重复x.equals(y)多少次，返回都是“true”。
 任何情况下，x.equals(null)，永远返回是“false” null.equals(x)
；
x.equals(和x不同类型的对象)永远返回是“false”。

* */



}
